Devel::ebug

Max Maischein

Frankfurt.pm

Devel::ebug

Ein neuer Debugger für Perl

Devel::ebug

Geschrieben von Léon Guy Louis Brocard

Devel::ebug

acme

Alkohol ist gefährlich

  • Jesse V. kam zu Léon Brocard

  • sagte zu ihm "Jemand sollte einen neuen Debugger schreiben"

  • und gab ihm Bier

Devel::ebug

Warum?

  • Manche Leute haben Angst vor dem eingebauten Debugger

  • Debugging mit print ist mühsam

  • Devel::ebug bringt neue Buzzwords

  • und Kätzchen sind süß

Kätzchen

Andere Debugger

 1:  perl -wc
  • Perl kompiliert die Datei

  • Lies die erste Fehlermeldung

  • Behebe den Fehler

  • Nochmal

Andere Debugger

 1:  warn "Ich bin hier ($i)"
 2:  $i++
 3:  warn "Und jetzt hier ($i)";
  • Debugger für arme Leute

  • ... aber er funktioniert

  • Warnings ausstreuen, die Variablen ausgeben

  • Ablauf verstehen, reparieren

  • Warnings entfernen

perl5db.pl

  • Der eingebaute Perl debugger

  • perl -d -e1

  • Konsolenprogramm

  • Ein mächtiger Dinosaurier

  • Neuntausendvierhundertachtundzwanzig Zeilen

  • ... macht Perl Programmiern Angst

  • ... macht perl Programmiern Angst

Angst und Schrecken

  • Here begins the unreadable code. It needs fixing

  • XXX This looks like a bug to me

  • Why copy everything into @ARGS and then futz with @args?

  • XXX I have no idea what this is doing. Yet.

ptkdb.pl

  • Tk-basierter Debugger

  • Nettes GUI

  • Braucht Tk

Devel::ebug

  • Perl und GUIs sind schwierig zusammen zu bekommen

  • Moment mal!

  • Das Web ist das neue GUI

Devel::ebug

perl -d:ebug

  • ... hat Tests

  • ... hat Plugins

  • ... ist konsolenbasiert

Devel::ebug::HTTP

ebug_http.pl

  • Kleiner Webserver

  • ... startet das Programm

  • ... und bietet ein Web-Frontend

  • ... braucht Catalyst

  • 276 Zeilen

Features

  • Einzelschritt, Nächste Zeile, Return, Run

  • Variablenauswertung

  • Breakpoints

  • Watchpoints

  • Stacktrace

  • Undo!

Live Demo

Konsole: Manuell starten http://localhost:8080/

 1:  my $q = 1;
 2:  my $w = 2;
 3:  my $e = add($q, $w);
 4:  $e++;
 5:  $e++;
 6:  
 7:  print "$e\n";
 8:  
 9:  sub add {
10:      my ($z,$x) = @_;
11:      my $c = $z + $x;
12:      return $c;
13:  }

Danke

Ich benutze warn und print.

Fragen?